package Views.TableModels;

import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public abstract class TableModelAbstract<T extends DB.RowInterface> extends DefaultTableModel
{
	protected ArrayList<T> data;

	public TableModelAbstract()
	{
		this.data = new ArrayList<T>();
	}

	public TableModelAbstract(ArrayList<T> data)
	{
		this.data = data;
	}

	@Override
	public boolean isCellEditable(int row, int column)
	{
		return false;
	}

	public void setData(ArrayList<T> data)
	{
		this.data = data;
		fireTableDataChanged();
	}

	public ArrayList<T> getData()
	{
		return this.data;
	}

	/**
	 * Returnerer antallet af kolonner i tabellen
	 * @return Antal kolonner
	 */
	@Override
	public abstract int getColumnCount();

	/**
	 * Returnerer antallet af rækker i tabellen
	 * @return Antal rækker
	 */
	@Override
	public abstract int getRowCount();

	/**
	 * Returnerer kolonnens navn
	 * @param column Kolonnens index
	 * @return Kolonnens navn
	 */
	@Override
	public abstract String getColumnName(int column);

	/**
	 * Returnerer værdien i et specifikt felt
	 * @param row Den givne række
	 * @param column Den givne kolonne
	 * @return Værdien af feltet
	 */
	@Override
	public abstract Object getValueAt(int row, int column);
}
